As the complexity of software applications and systems increases, building systems with self-managing or autonomic features becomes increasingly important. Monitoring applications and taking corrective actions when exceptions occur is a common approach to self-managing in software applications. In order to provide self-managing functionality to a software application, a set of sensors is connected to the software application by creating and implementing the corresponding interfaces. This requires modifying the source code of the software application and the sensor if the interfaces are not already available. However, the availability of well documented source code is often limited. This limitation is especially acute for legacy systems where the source code is often unavailable and poorly annotated. In addition, building such self-managing systems is hindered by a lack of available generic monitoring tools that can be used for a variety software applications running on various hardware platforms. If source code is not available, or it is too costly to change and test the source code, it becomes very difficult to add such monitoring functions to software applications, limiting the application of autonomic behavior in these applications.
Therefore, monitoring systems are typically application specific and are created contemporaneously with the development of the software applications. Traditionally, building self-managing features into a software application requires that the specific requirements be considered and included in design time. i.e. at the time the software application itself is created. Even given the availability of the source code, the sheer number of events that potentially need to be monitored make the integration of self-monitoring difficult and substantially increase the complexity and cost of developing the software applications.
Therefore, a need exists for systems and methods that can provide autonomic management to software applications in general and specifically to existing legacy software applications when source code is not available or when it may be prohibitively expensive and time consuming to modify and re-test the source code. These self-managing systems and methods would preferably be generic and not platform specific so that they could be developed once and applied across a wide variety of applications. In addition, the software application being monitored would not be modified or adversely effected by the monitoring system.